package com.kotlin.flong.coroutines

import kotlinx.coroutines.*

/**
 * @Author:liangjl
 * @Date: 2020/7/7-17:33
 * @Eamil:jilongliang@sina.com
 * @Description:
 * 有两种方式可以让计算代码变成可取消
 * 1、周期性调用一个挂起函数，该挂起函数会检查取消状态，比如说使用yield函数
 * 2、显示地检查取消状态
 * 如下示例将会采用第二种方式
 * 其中isActive是协程的一个扩展属性，它是通过CoroutineScope
 */
fun main() = runBlocking {
    var startTime = System.currentTimeMillis()

    var job = launch(Dispatchers.Default) {
        var nextPrintTime = startTime
        var i = 0
        while (isActive) {
            //if外面执行了多次
            //println(System.currentTimeMillis())
            if (System.currentTimeMillis() >= nextPrintTime) {
                println("job :i am sleeping ${i++}")
                nextPrintTime += 500L
            }
        }
    }

    delay(1300)
    println("hello world")

    job.cancelAndJoin()

}